<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.0.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"yoursite.com","root":"/","scheme":"Mist","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":true},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},"path":"search.xml"};
  </script>

  <meta name="description" content="哈希与加密的区别首先要了解哈希（Hash）和加密（Encrypt）的区别，正确区别两者是正确选择和使用哈希与加密的基础。概括来说，哈希（Hash）是将目标文本转换成具有相同长度的、不可逆的杂凑字符串（或叫做消息摘要），而加密（Encrypt）是将目标文本转换成具有不同长度的、可逆的密文。">
<meta property="og:type" content="article">
<meta property="og:title" content="MD5,SHA,GPG和PGP">
<meta property="og:url" content="http://yoursite.com/2020/03/03/MD5-SHA-GPG%E5%92%8CPGP/index.html">
<meta property="og:site_name" content="FU">
<meta property="og:description" content="哈希与加密的区别首先要了解哈希（Hash）和加密（Encrypt）的区别，正确区别两者是正确选择和使用哈希与加密的基础。概括来说，哈希（Hash）是将目标文本转换成具有相同长度的、不可逆的杂凑字符串（或叫做消息摘要），而加密（Encrypt）是将目标文本转换成具有不同长度的、可逆的密文。">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2020-03-03T03:50:04.000Z">
<meta property="article:modified_time" content="2020-08-02T11:49:36.754Z">
<meta property="article:author" content="fu">
<meta property="article:tag" content="MD5">
<meta property="article:tag" content="SHA">
<meta property="article:tag" content="PGP">
<meta property="article:tag" content="GPG">
<meta name="twitter:card" content="summary">

<link rel="canonical" href="http://yoursite.com/2020/03/03/MD5-SHA-GPG%E5%92%8CPGP/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>MD5,SHA,GPG和PGP | FU</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">FU</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
        <i class="fa fa-search fa-fw fa-lg"></i>
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="main-menu menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="tags fa-fw"></i>标签</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="th fa-fw"></i>分类</a>

  </li>
      <li class="menu-item menu-item-search">
        <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
        </a>
      </li>
  </ul>
</nav>



  <div class="search-pop-overlay">
    <div class="popup search-popup">
        <div class="search-header">
  <span class="search-icon">
    <i class="fa fa-search"></i>
  </span>
  <div class="search-input-container">
    <input autocomplete="off" autocapitalize="off"
           placeholder="搜索..." spellcheck="false"
           type="search" class="search-input">
  </div>
  <span class="popup-btn-close">
    <i class="fa fa-times-circle"></i>
  </span>
</div>
<div id="search-result">
  <div id="no-result">
    <i class="fa fa-spinner fa-pulse fa-5x fa-fw"></i>
  </div>
</div>

    </div>
  </div>

</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/03/03/MD5-SHA-GPG%E5%92%8CPGP/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="fu">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="FU">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          MD5,SHA,GPG和PGP
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-calendar"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>

              <time title="创建时间：2020-03-03 11:50:04" itemprop="dateCreated datePublished" datetime="2020-03-03T11:50:04+08:00">2020-03-03</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="far fa-calendar-check"></i>
                </span>
                <span class="post-meta-item-text">更新于</span>
                <time title="修改时间：2020-08-02 19:49:36" itemprop="dateModified" datetime="2020-08-02T19:49:36+08:00">2020-08-02</time>
              </span>
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-folder"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E6%8A%80%E6%9C%AF/" itemprop="url" rel="index"><span itemprop="name">技术</span></a>
                </span>
                  ，
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E6%8A%80%E6%9C%AF/%E5%AF%86%E7%A0%81%E5%AD%A6/" itemprop="url" rel="index"><span itemprop="name">密码学</span></a>
                </span>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <h1 id="哈希与加密的区别"><a href="#哈希与加密的区别" class="headerlink" title="哈希与加密的区别"></a>哈希与加密的区别</h1><p>首先要了解哈希（Hash）和加密（Encrypt）的区别，正确区别两者是正确选择和使用哈希与加密的基础。<br>概括来说，哈希（Hash）是将目标文本转换成具有相同长度的、不可逆的杂凑字符串（或叫做消息摘要），而加密（Encrypt）是将目标文本转换成具有不同长度的、可逆的密文。<a id="more"></a><br>具体来说，两者有如下重要区别：</p>
<ol>
<li><strong>哈希算法往往被设计成生成具有相同长度的文本，而加密算法生成的文本长度与明文本身的长度有关</strong>。<br>例如，设我们有两段文本：“Microsoft”和“Google”。两者使用某种哈希算法得到的结果分别为：“140864078AECA1C7C35B4BEB33C53C34”和“8B36E9207C24C76E6719268E49201D94”，而使用某种加密算法的到的结果分别为“Njdsptpgu”和“Hpphmf”。可以看到，哈希的结果具有相同的长度，而加密的结果则长度不同。实际上，如果使用相同的哈希算法，不论你的输入有多么长，得到的结果长度是一个常数，而加密算法往往与明文的长度成正比。</li>
<li><strong>哈希算法是不可逆的，而加密算法是可逆的</strong>。<br>这里的不可逆有两层含义，一是“给定一个哈希结果R，没有方法将E转换成原目标文本S”，二是“给定哈希结果R，即使知道一段文本S的哈希结果为R，也不能断言当初的目标文本就是S”。其实稍微想想就知道，哈希是不可能可逆的，因为如果可逆，那么哈希就是世界上最强悍的压缩方式了——能将任意大小的文件压缩成固定大小。<br>加密则不同，给定加密后的密文R，存在一种方法可以将R确定的转换为加密前的明文S。</li>
</ol>
<h1 id="哈希与加密的数学基础"><a href="#哈希与加密的数学基础" class="headerlink" title="哈希与加密的数学基础"></a>哈希与加密的数学基础</h1><p>从数学角度讲，哈希和加密都是一个映射。下面正式定义两者：</p>
<ul>
<li><p>一个哈希算法$R=H(S)$是一个多对一映射，给定目标文本S，H可以将其唯一映射为R，并且对于所有S，R具有相同的长度。由于是多对一映射，所以H不存在逆映射$S=H^{-1}(R)$使得R转换为唯一的S。</p>
</li>
<li><p>一个加密算法$R=E(S,K_E)$是一个一一映射，其中第二个参数叫做加密密钥，E可以将给定的明文S结合加密密钥Ke唯一映射为密文R，并且存在另一个一一映射$S=D(R,K_D)$，可以结合Kd将密文R唯一映射为对应明文S，其中Kd叫做解密密钥。</p>
</li>
</ul>
<p>由于哈希算法的定义域是一个无限集合，而值域是一个有限集合，将无限集合映射到有限集合，每个哈希结果都存在无数个可能的目标文本，因此哈希不是一一映射，是不可逆的。 而加密算法是一一映射，因此理论上来说是可逆的。</p>
<h1 id="哈希算法-摘要算法"><a href="#哈希算法-摘要算法" class="headerlink" title="哈希算法(摘要算法)"></a>哈希算法(摘要算法)</h1><p>常见的Hash算法有MD5(Message-Digest Algorithm)和SHA(Secure Hash Algorithm)。SHA又包括 SHA-1 和 SHA-2(SHA-224、SHA-256、SHA-384、SHA-512) 和SHA-3。</p>
<ul>
<li>MD5是输入不定长度信息，输出固定长度128-bits的算法。经过程序流程，生成四个32位数据，最后联合起来成为一个128-bits散列。基本方式为，求余、取余、调整长度、与链接变量进行循环运算，得出结果。</li>
<li>SHA-1在许多安全协议中广为使用，包括TLS和SSL、PGP、SSH、S/MIME和IPsec，曾被视为是MD5（更早之前被广为使用的散列函数）的后继者。</li>
<li>SHA-2它的算法跟SHA-1基本上仍然相似；因此有些人开始发展其他替代的散列算法。</li>
<li>由于对MD5出现成功的破解，以及对SHA-1和SHA-2出现理论上破解的方法，NIST感觉需要一个与之前算法不同的，可替换的加密杂凑算法，也就是现在的SHA-3。</li>
</ul>
<h2 id="SHA算法家族哈希值大小及输出长度"><a href="#SHA算法家族哈希值大小及输出长度" class="headerlink" title="SHA算法家族哈希值大小及输出长度:"></a>SHA算法家族哈希值大小及输出长度:</h2><ul>
<li>SHA-1算法的哈希值大小为160位，其计算输出长度为40位16进制字符串。</li>
<li>SHA-224算法的哈希值大小为224位，其计算输出长度为56位16进制字符串。</li>
<li>SHA-256算法的哈希值大小为256位，其计算输出长度为64位16进制字符串。</li>
<li>SHA-384算法的哈希值大小为384位，其计算输出长度为96位16进制字符串。</li>
<li>SHA-512算法的哈希值大小为512位，其计算输出长度为128位16进制字符串。</li>
</ul>
<h2 id="SHA1与MD5算法比较"><a href="#SHA1与MD5算法比较" class="headerlink" title="SHA1与MD5算法比较"></a>SHA1与MD5算法比较</h2><p>SHA1和MD5做为两种单向散列算法，二者均由MD4算法延伸导出，它们的强度及相关特性也非常相似。两者的区别主要体现以下几点：</p>
<ol>
<li>SHA1防碰撞性更好：两者最主要的区别还在于SHA1要比MD5摘要要长 32位。单从强行攻击角度来说，要破结一个MD5哈希摘要报文，其需要操作的数量级为$2^{128}$。而对于SHA1哈希摘要报文，其所需的数量级为$2^{160}$。从这方面来说，SHA1具有更好的抗强行攻击安全性。</li>
<li>MD5运算速度更快：由于MD5比SHA1更短，在相同的硬件上，计算MD5哈希摘要要 比计算SHA1哈希摘要速度更快。</li>
<li>SHA1相对安全：SHA1MD5，而MD5在设计方面也易受密码分析的攻击，理论上讲SHA1的安全性要高于MD5。</li>
</ol>
<h2 id="MD5-SHA实际应用"><a href="#MD5-SHA实际应用" class="headerlink" title="MD5,SHA实际应用"></a>MD5,SHA实际应用</h2><ol>
<li><p>Git的分支版本号管理就是用了SHA-1根据内容改变生成一串消息摘要。<br>使用git中的hash命令也可以查看指定文件的sha-1值:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ git <span class="built_in">hash</span>-object  README.md</span><br><span class="line">a13c2dba7f888de53aa3e84e69e8a131109bbfc8</span><br></pre></td></tr></table></figure>
<p>那么Git是否考虑到SHA1碰撞的问题，可以看<a target="_blank" rel="noopener" href="https://www.zhihu.com/question/23789956/answer/148204243">这里</a></p>
</li>
<li><p>Docker中经常使用的生成各种UUID的是SHA-256算法，例如镜像层ImageID,容器ID。所有镜像层和容器层都保存在宿主机的文件系统/var/lib/docker/中，由存储驱动进行管理。</p>
</li>
<li><p>Linux下校验下载文件的完整性(MD5,SHA256)</p>
</li>
</ol>
<ul>
<li><p>MD5校验</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#直接输出MD5 Hash</span></span><br><span class="line">$ md5sum your-downloaded-file-name</span><br><span class="line">fd4a1b802373c57c10c926eb7ac823d8  your-downloaded-file-name</span><br><span class="line"><span class="comment">#当前目录下所有文件生成MD5 Hash</span></span><br><span class="line">$ md5sum * | tee hi.md5</span><br><span class="line"><span class="comment">#将MD5 Hash值保存到md5-hash.txt文件中.</span></span><br><span class="line">$ md5sum your-downloaded-file-name &gt; md5-hash.txt</span><br><span class="line"><span class="comment"># 显示输出的md5-hast.txt内容</span></span><br><span class="line">$ cat md5-hash.txt</span><br><span class="line">fd4a1b802373c57c10c926eb7ac823d8  your-downloaded-file-name</span><br><span class="line"><span class="comment"># 通过md5-hash.txt来校验你下载的文件是否正确</span></span><br><span class="line">$ md5sum -c md5-hash.txt</span><br><span class="line">your-downloaded-file-name: OK</span><br></pre></td></tr></table></figure>
<p>你是文件的发布者话，你可以通过md5sum把文件的哈希值发送给验证者，这样下载你文件的人就可以通过MD5哈希值来验证你的文件正确性。反过来，我们在网站上下载文件之后，同时可以获取发布者的MD5哈希值和本地生成的Hash值对比，如果一致，认为文件是正确的。</p>
</li>
<li><p>SHA265校验<br>原理： 原理同MD5一样，都是通过对文件进行HASH求值，比对文件发布者发布的HASH值，通过是否相等判断文件是否被篡改。<br>sha256sum 命令 和 md5sum 命令一样的功能，只是使用算法不同，sha256相对 md5sum 更为准确，所以现在很多的系统的发行版都是使用 sha256sum 进行校验！实际例子：<a target="_blank" rel="noopener" href="https://www.kali.org/downloads/">Kali Linux</a></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ sha256sum kali-linux-light-2018.2-amd64.iso </span><br><span class="line">554f020b0c89d5978928d31b8635a7eeddf0a3900abcacdbc39616f80d247f86  kali-linux-light-2018.2-amd64.iso</span><br></pre></td></tr></table></figure>

</li>
</ul>
<h1 id="对称加密和非对称加密"><a href="#对称加密和非对称加密" class="headerlink" title="对称加密和非对称加密"></a>对称加密和非对称加密</h1><p><strong>对称加密</strong>：指的就是加、解密使用的同是一串密钥，所以被称做对称加密。对称加密只有一个密钥作为私钥。 常见的对称加密算法：DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6 和 AES等。</p>
<p><strong>非对称加密</strong>：指的是加、解密使用不同的密钥，一把作为公开的公钥，另一把作为私钥。公钥加密的信息，只有私钥才能解密。反之，私钥加密的信息，只有公钥才能解密。 举个例子，你向某公司服务器请求公钥，服务器将公钥发给你，你使用公钥对消息加密，那么只有私钥的持有人才能对你的消息解密。与对称加密不同的是，公司服务器不需要将私钥通过网络发送出去，因此安全性大大提高。最常用的非对称加密算法：RSA、ECC （移动设备用）、Diffie-Hellman、El Gamal、DSA （数字签名用）</p>
<p><strong>对称加密优缺点</strong>：对称加密相比非对称加密算法来说，加解密的效率要高得多、加密速度快。但是缺陷在于对于密钥的管理和分发上比较困难，不是非常安全，密钥管理负担很重。<br><strong>非对称加密优缺点</strong>：安全性更高，公钥是公开的，密钥是自己保存的，不需要将私钥给别人。缺点：加密和解密花费时间长、速度慢，只适合对少量数据进行加密。</p>
<p><strong>总结</strong>：安全肯定是非对称加密安全，但是效率比较慢，对称加密效率高，但是不安全。严谨一点的做法是混合起来使用，将对称加密的密钥使用非对称加密的公钥进行加密，然后发送出去，接收方使用私钥进行解密得到对称加密的密钥，然后双方可以使用对称加密来进行沟通。实际工作中直接使用非对称加、解密其实也可以，因为我们平时一般请求的报文不会很大，加解密起来速度在可接受范围内，或者可以对敏感字段，比如密码、手机号、身份证号等进行分段加密，效率还可以。</p>
<h1 id="PGP和GPG"><a href="#PGP和GPG" class="headerlink" title="PGP和GPG"></a>PGP和GPG</h1><h2 id="什么是PGP"><a href="#什么是PGP" class="headerlink" title="什么是PGP"></a>什么是PGP</h2><p>PGP（Pretty Good Privacy）是一套用于讯息加密、验证的应用程序，采用IDEA的散列算法作为加密和验证之用。<br>PGP加密由一系列散列、数据压缩、对称密钥加密，以及公钥加密的算法组合而成。每个步骤均支持几种算法，用户可以选择一个使用。每个公钥均绑定一个用户名和/或者E-mail地址。<br>PGP的主要开发者是菲尔·齐默曼（Phil Zimmermann）。齐默曼于1991年将PGP在互联网上免费发布。PGP本身是商业应用程序；开源并具有同类功能的工具名为GnuPG（GPG）。PGP及其同类产品均遵守OpenPGP数据加解密标准。</p>
<h2 id="什么是GPG"><a href="#什么是GPG" class="headerlink" title="什么是GPG"></a>什么是GPG</h2><p>GnuPG（GNU Privacy Guard，GPG）是一种加密软件，它是PGP加密软件的开源替代物。GnuPG依照由IETF制定的OpenPGP技术标准设计。GnuPG是用于加密、数字签章及产生非对称匙对的软件。GPG 兼容 PGP（Pretty Good Privacy）的功能。</p>
<h2 id="GPG实际应用"><a href="#GPG实际应用" class="headerlink" title="GPG实际应用"></a>GPG实际应用</h2><p>尽管MD5,SHA等哈希函数就可以用于日常校验安装包是否被改变过，但是还是有一定的可能性发生修改后的数据包哈希结果的值还是和之前相同，而且也无法证明这个包就是特定的某个人或者特定的官方机构发出来的。所以用到了GPG来进一步签名认证。<br>Github 使用 GPG 签名验证一般Linux发行版都包含GPG软件包，可以通过发行版的包管理器来安装（一般发行版都会默认安装，因为这个软件太重要了）。使用下面的命令确认当前系统是否安装了GPG</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ gpg --version</span><br></pre></td></tr></table></figure>

<h3 id="常规操作"><a href="#常规操作" class="headerlink" title="常规操作"></a>常规操作</h3><h4 id="生成密钥"><a href="#生成密钥" class="headerlink" title="生成密钥"></a>生成密钥</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">## 生成新的密钥对</span></span><br><span class="line">$ gpg --gen-key </span><br><span class="line">$ gpg --generate-key </span><br><span class="line"><span class="comment">## 以全功能形式生成新的密钥对（期间会有一些密钥的配置）</span></span><br><span class="line">$ gpg --full-generate-key</span><br><span class="line">$ gpg --full-gen-key  </span><br></pre></td></tr></table></figure>

<h4 id="列出密钥"><a href="#列出密钥" class="headerlink" title="列出密钥"></a>列出密钥</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#列出公钥</span></span><br><span class="line">$ gpg --list-keys</span><br><span class="line">$ gpg --list-key [用户ID]</span><br><span class="line"><span class="comment">#列出私钥</span></span><br><span class="line">$ gpg --list-secret-keys </span><br></pre></td></tr></table></figure>

<h1 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h1><ul>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/leoo2sk/archive/2010/10/01/hash-and-encrypt.html">哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用</a></li>
<li><a target="_blank" rel="noopener" href="https://zhuanlan.zhihu.com/p/37165658">哈希算法与MD5、SHA</a></li>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/xuyaowen/p/md5sum_sha256_usages.html">md5sum 和 sha256sum用于 验证软件完整性</a></li>
<li><a target="_blank" rel="noopener" href="http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pgp-to-check-downloaded-file-integrity-on-linux.aspx">Linux下校验下载文件的完整性(MD5,SHA1,PGP)</a></li>
<li><a target="_blank" rel="noopener" href="https://juejin.im/post/5abb6c8651882555784e051d">对称加密、非对称加密、RSA(总结)</a></li>
<li><a target="_blank" rel="noopener" href="https://rekols.github.io/2019/08-03/github-using-gpg/">Github 使用 GPG 签名验证</a></li>
<li><a target="_blank" rel="noopener" href="https://www.bitlogs.tech/2019/01/gpg%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/">GPG使用教程</a></li>
<li><a target="_blank" rel="noopener" href="https://zhuanlan.zhihu.com/p/29575509">GPG 与端到端加密：论什么才是可以信任的</a></li>
</ul>

    </div>

    
    
    

      <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/MD5/" rel="tag"># MD5</a>
              <a href="/tags/SHA/" rel="tag"># SHA</a>
              <a href="/tags/PGP/" rel="tag"># PGP</a>
              <a href="/tags/GPG/" rel="tag"># GPG</a>
          </div>

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/2020/03/02/%E5%8D%9A%E5%AE%A2%E4%BC%98%E5%8C%96%E8%AE%B0%E5%BD%95/" rel="prev" title="博客优化记录">
      <i class="fa fa-chevron-left"></i> 博客优化记录
    </a></div>
      <div class="post-nav-item">
    <a href="/2020/03/21/%E4%BD%BF%E7%94%A8Google%E5%AE%98%E6%96%B9%E6%8E%A8%E8%8D%90%E7%9A%84webp%E8%BF%9B%E8%A1%8C%E5%9B%BE%E7%89%87%E5%8E%8B%E7%BC%A9/" rel="next" title="使用Google官方推荐的webp进行图片压缩">
      使用Google官方推荐的webp进行图片压缩 <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%93%88%E5%B8%8C%E4%B8%8E%E5%8A%A0%E5%AF%86%E7%9A%84%E5%8C%BA%E5%88%AB"><span class="nav-text">哈希与加密的区别</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%93%88%E5%B8%8C%E4%B8%8E%E5%8A%A0%E5%AF%86%E7%9A%84%E6%95%B0%E5%AD%A6%E5%9F%BA%E7%A1%80"><span class="nav-text">哈希与加密的数学基础</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%93%88%E5%B8%8C%E7%AE%97%E6%B3%95-%E6%91%98%E8%A6%81%E7%AE%97%E6%B3%95"><span class="nav-text">哈希算法(摘要算法)</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#SHA%E7%AE%97%E6%B3%95%E5%AE%B6%E6%97%8F%E5%93%88%E5%B8%8C%E5%80%BC%E5%A4%A7%E5%B0%8F%E5%8F%8A%E8%BE%93%E5%87%BA%E9%95%BF%E5%BA%A6"><span class="nav-text">SHA算法家族哈希值大小及输出长度:</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#SHA1%E4%B8%8EMD5%E7%AE%97%E6%B3%95%E6%AF%94%E8%BE%83"><span class="nav-text">SHA1与MD5算法比较</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#MD5-SHA%E5%AE%9E%E9%99%85%E5%BA%94%E7%94%A8"><span class="nav-text">MD5,SHA实际应用</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86%E5%92%8C%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86"><span class="nav-text">对称加密和非对称加密</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#PGP%E5%92%8CGPG"><span class="nav-text">PGP和GPG</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E4%BB%80%E4%B9%88%E6%98%AFPGP"><span class="nav-text">什么是PGP</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E4%BB%80%E4%B9%88%E6%98%AFGPG"><span class="nav-text">什么是GPG</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#GPG%E5%AE%9E%E9%99%85%E5%BA%94%E7%94%A8"><span class="nav-text">GPG实际应用</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#%E5%B8%B8%E8%A7%84%E6%93%8D%E4%BD%9C"><span class="nav-text">常规操作</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#%E7%94%9F%E6%88%90%E5%AF%86%E9%92%A5"><span class="nav-text">生成密钥</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#%E5%88%97%E5%87%BA%E5%AF%86%E9%92%A5"><span class="nav-text">列出密钥</span></a></li></ol></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%8F%82%E8%80%83%E9%93%BE%E6%8E%A5"><span class="nav-text">参考链接</span></a></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">fu</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives">
          <span class="site-state-item-count">9</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
          
        <span class="site-state-item-count">9</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">15</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>
  <div class="links-of-author motion-element">
      <span class="links-of-author-item">
        <a href="https://github.com/yourname" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;yourname" rel="noopener" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a>
      </span>
      <span class="links-of-author-item">
        <a href="https://weibo.com/yourname" title="Weibo → https:&#x2F;&#x2F;weibo.com&#x2F;yourname" rel="noopener" target="_blank"><i class="fab fa-weibo fa-fw"></i>Weibo</a>
      </span>
  </div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2020</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">fu</span>
</div>
  <div class="powered-by">由 <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> & <a href="https://mist.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Mist</a> 强力驱动
  </div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/muse.js"></script>


<script src="/js/next-boot.js"></script>




  




  
<script src="/js/local-search.js"></script>













  

  

</body>
</html>
